﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/********一.分支和循环********/
/******1.if语句******/
//if(表达式)
//	语句



/******1.2 else******/

/*
int main()
{
	int num = 0;
	//输入
	scanf("%d",&num);
	//判断
	if (num % 2 == 1)
	{
		printf("%d 是奇数\n",num);
	}
	else
	{
		printf("%d 是偶数\n", num);
	}
	return 0;
}*/

/*
int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age >= 18)
		printf("成年\n");
	else
		printf("成年人\n");
	return 0;
}*/

/****************1.4 嵌套if******************/
//要求输⼊⼀个整数，判断输⼊的整数是0，还是正数或者负数。
/*
int main()
{
	int num = 0;
	scanf("%d",&num);
	if (num == 0)
		printf("num是0\n");
	else
	{
		if (num > 0)
			printf("num是整数\n");
		else
			printf("num是负数\n");//是一条语句
	}
	return 0;
}*/

/*
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num == 0)
		printf("num是0\n");
	else if (num > 0)
		printf("num是整数\n");
	else
		printf("num是负数\n");
	return 0;
}*/

/*
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num >= 0)
	{
		if(num >0)
			printf("num是整数\n");
		else
			printf("num是0\n");
	}
	else
		printf("num是负数\n");
	return 0;
}*/

//输⼊⼀个⼈的年龄
//如果年龄 < 18岁，打印"少年"
//如果年龄在18岁⾄44岁打印"⻘年"
//如果年龄在45岁⾄59岁打印"中⽼年"
//如果年龄在60岁⾄89岁打印"⽼年"
//如果90岁及以上打印"⽼寿星"

/*1.
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("少年");
	else if(age >=18 && age <= 44)
		printf("青年"); 
	else if (age >= 45 && age <= 59)
		printf("中老年");
	else if (age >= 60 && age <= 89)
		printf("老年");
	else
		printf("老寿星");
	return 0;
}*/

/*2.
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("少年\n");
	}
	else
	{
		if (age <= 44)
		{
			printf("青年\n");
		}
		else
		{
			if (age <= 59)
			{
				printf("中老年\n");
		    }
			else
			{
				if (age <= 89)
				{
					printf("老年\n");
				}
				else
				{
					printf("老寿星\n");
				}
			}
		}
	}
	return 0;
}*/

/**********1.5 悬空else问题**********/
/*
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");//else 总是跟最接近的 if 匹配
	return 0;
}*/

/********************2. 关系操作符********************/
//C 语⾔⽤于⽐较的表达式，称为 “关系表达式”

/*
	 > ⼤于运算符
	< ⼩于运算符
	• >= ⼤于等于运算符
	• <= ⼩于等于运算符
	• == 相等运算符
	• != 不相等运算符
*/

/*
int main()
{
	if (3 == 5)
	{
		printf("hehe");
	}
	int a = (3 < 5);
	int b = (3 == 5);
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}*/

/*************3. 条件操作符**************/
//条件操作符也叫三⽬操作符，需要接受三个操作数的
//exp1 ? exp2 : exp3
//exp1 为真， exp2 计算
//exp1 为假， exp3 计算

//使⽤条件操作符表⽰下⾯代码的逻辑
/*
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b );
	b =(a > b ? 3 : -3);
	//if (a > 5)
		//b = 3;
	//else
		//b = -3;
	printf("%d\n",b);
	return 0;
}*/

//使⽤条件表达式实现找两个数中较⼤值
/*
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	int max = (a > b ? a : b);
	printf("%d\n",max);
	return 0;
}*/

/************* 4.逻辑操作符：&& , || , ！**************/
//&& ：逻辑与运算符，就是并且的意思（两侧的表达式都为真，则为真，否则为假）。
//|| ：逻辑或运算符，就是或者的意思（两侧⾄少有⼀个表达式为真，则为真，否则为假）
// ! ：逻辑取反运算符（改变单个表达式的真假）。

/*********** 4.1 逻辑取反运算符 ！************/
/*
int main()
{
	int a = 0;
	printf("%d",!a);
	return 0;
}*/

/*
int main()
{
	int flag = 0;
	scanf("%d",&flag);
	if(!flag)
	{
		printf("do something");
	}
	return 0;
}*/

/*********** 4.2 逻辑与运算符 &&************/
//我们说⽉份是3⽉到5⽉，是春天，那使⽤代码怎么体现呢

/*
int main()
{
	int month = 0;
	scanf("%d",&month);
	if (month >= 3 && month <= 5)
	{
		printf("春季\n");
	}
	return 0;
}*/

/*********** 4.3 逻辑或运算符 ||************/
//我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天，那么我们怎么使⽤代码体现呢

/*
int main()
{
	int month = 0;
	scanf("%d",&month);
	if (month == 12 || month == 1 || month == 2)
	{
		printf("冬季");
	}
	return 0;
}*/


/***********4.4 练习：闰年的判断************/

/*
int main()
{
	int year = 0;
	scanf("%d",&year);
	if (year % 4 == 0 && year % 100 != 0)
	{
		printf("是闰年");
	}
	else if (year % 400 == 0)
	{
		printf("是闰年");
	}
	return 0;
}*/

/*
int main()
{
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
	{
		printf("是闰年");
	}
	else
	{
		printf("不是闰年");
	}
	return 0;
}*/

/***********4.5 短路************/
//C语⾔逻辑运算符还有⼀个特点，它总是先对左侧的表达式求值，再对右边的表达式求值，这个顺序是保证的。
//如果左边的表达式满⾜逻辑运算符的条件，就不再对右边的表达式求值。这种情况称为“短路”。

//if (month >= 3 && month <= 5)
//对于&& 操作符来说，左边操作数的结果是0的时候，右边操作数就不再执⾏

//if (month == 12 || month == 1 || month == 2)
//|| 操作符的左操作数的结果不为0时，就⽆需执⾏右操作数

/*
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
		//a++先用后加，所以a++表达式结果为0；左边操作数的结果是0的时候，右边操作数就不再执⾏
	
	printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);//1,2,3,4
	printf("%d",i);
	return 0;
}*/

/*
int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++||++b||d++;

	printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);//1,3,3,4
	printf("%d", i);
	return 0;
}*/

/**********************5. switch 语句******************************/
//switch 语句是⼀种特殊形式的 if...else 结构，⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式
//switch 后的 expression 必须是整型表达式 //int, short, long, long long, char
//case 后的值，必须是整形常量表达式

/*
switch (expression) {
case value1: statement
case value2: statement
	...
default: statement
}*/

/***********5.1 if语句和switch语句的对⽐************/
//输⼊任意⼀个整数值，计算除3之后的余数

/*
int main()
{
	int num = 0;
	scanf("%d",&num);
	if (num % 3 == 0)
	{
		printf("是3的余数\n");
	}
	else if(num % 3 == 1)
	{
		printf("余数是1\n");
	}
	else if(num % 3 == 2)
	{
		printf("余数是2\n");
	}
	return 0;
}*/

/*
int main()
{
	int num = 0;
	scanf("%d", &num);
	switch (num % 3)
	{
	case 0:
		printf("是3的余数\n");
		break;
	case 1:
		printf("余数是1\n");
		break;
	case 2:
		printf("余数是2\n");
		break;
	}
	return 0;
}*/

//输入一个1-7的数字，打印对应的星期几
/*
int main()
{
	int day = 0;
	scanf("%d",&day);
	switch (day)
	{
	case 1:
		printf("星期一");
		break;
	case 2:
		printf("星期二");
	case 3:
		printf("星期三");
	case 4:
		printf("星期四");
	case 5:
		printf("星期五");
		break;
	case 6:
		printf("星期六");
		break;
	case 7:
		printf("星期七");
		break;
	default:
		printf("星期个蛋");
		break;
	}
	return 0;
}*/

//输入1-5的数字，输出工作日
//输入6-7的数字，输出休息日

/*
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	default:
		printf("你休息个蛋");
		break;
	}
	return 0;
}*/

/***********5.3 switch语句中的default************/
/*在使⽤ switch 语句的时候，我们经常可能遇到⼀种情况，⽐如 switch 后的表达式中的值
⽆法匹配代码中的 case 语句的时候，这时候要不就不做处理，要不就得在 switch 语句中加
⼊default ⼦句*/

/*
switch (expression) {
case value1: statement
case value2: statement
default: statement
}*/

/***********5.4 switch语句中的case和default的顺序问题************/
//在 switch 语句中 case 语句和 default 语句是没有顺序要求的，只要你的顺序是满⾜实
//际需求的就可以

/*
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	default:
		printf("你休息个蛋");
		break;
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	
	}
	return 0;
}*/      

/***********作业************/
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		if (i = 5)//不是==，死循环的打印5
//			printf("%d ", i);
//	}
//	return 0;
//}

